package cn.lzd.mvp.base.struct;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import butterknife.ButterKnife;


/**
 * FileName: BaseFragment
 * Founder:
 * Create Date:
 * Email:
 * Profile: Base Fragment
 *
 * 泛型未知，但是，主动继承IPresenter
 */

public abstract class BaseFragment<P extends IPresenter> extends Fragment  implements IView, InitialPro<P> {

    protected P mPresenter;
    protected View mContentView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPresenter = initPresenter();//被泛型的某一个Presenter来初始化（引入）IPresenter 在Fragment中
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mContentView = inflater.inflate(getContentViewId(), container, false);
        // Base View 主要做的，绑定 Presenter，初始化结构，绑定ButterKnife
        // ButterKnife 就是做了一个视图绑定，不用再findviewbyid
        ButterKnife.bind(this, mContentView);
        initView();
        initData();
        return mContentView;
    }

    @CallSuper
    protected void initData() {
        // 可以看到，在View 基类中，视图创建好了之后
        // 会告知Presenter可以准备请求网络数据了
        // 因为如果过早，视图还没创建，如果网络请求好了，那就会崩溃
        // 所以这个时机让Presenter请求网络 哦。明白了。是的。。
        mPresenter.initDataReq();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // 在视图销毁时，释放资源
        if (mPresenter != null) {
            // 告知Presenter释放
            mPresenter.onDestroy();
            mPresenter = null;
        }
    }
}